<?php
	require_once PATH_OBJECT.'dataObject.php';
	
class dataObject_conditionVente extends dataObject
{

    /* @desc    Identifiant de la cdtion de vente
     * @var     int
     */
    public $_IDENTIFIANT_CDT_VENTE  = 0; 
    
	/* @desc    code de la cdtion de vente
     * @var     CHAR
     */
    public $_CODE_CDT_VENTE = '';
    
	/* @desc    libelle de la cdtion de vente
     * @var     VARCHAR
     */
    public $_LIBELLE_CDT_VENTE = '';
    
	/* @desc    valeur de la cdtion de vente
     * @var     int
     */
    public $_VALEUR_CDT_VENTE 	 = 0;
    
	/* @desc    type de la cdtion de vente
     * @var     CHAR
     */
    public $_TYPE_CDT_VENTE 	= '';
    
	/* @desc    date debut validité de la cdtion de vente
     * @var     DATE
     */
    public $_DATE_DEBUT_CDT_VENTE = '';
    
	/* @desc    date fin validité de la cdtion de vente
     * @var     DATE
     */
    public $_DATE_FIN_CDT_VENTE = '';
    
	/* @desc    Identifiant offre associée à la cdtion de vente
     * @var     int
     */
    public $_IDENTIFIANT_OFFRE 	 = 0;
    
	/* @desc    Identifiant produit associé à la cdtion de vente
     * @var     int
     */
    public $_IDENTIFIANT_PRODUIT = 0;
    
    
  	public function __construct( $iId=0 )
    {
       parent::__construct();

       if ( $iId != 0 )
       {
            $sQuery = "SELECT   *   /*+ dataObject_conditionVente::__construct */  
                       FROM conditionvente 
            		   WHERE Identifiant_condition_vente = ".$iId;
            
            $aRows =  self::$_oConnexion->query($sQuery);
	  		$aRow = $aRows[0];
            $this->_IDENTIFIANT_CDT_VENTE	= $iId;
 			$this->_CODE_CDT_VENTE 			= $aRow['Code_condition_vente'];
			$this->_LIBELLE_CDT_VENTE 		= $aRow['Libelle_condition_vente'];
			$this->_VALEUR_CDT_VENTE 		= $aRow['Valeur_condition_vente'];
			$this->_TYPE_CDT_VENTE 			= $aRow['Type_condition_vente'];
			$this->_DATE_DEBUT_CDT_VENTE 	= $aRow['Date_debut_condition_vente'];
			$this->_DATE_FIN_CDT_VENTE 		= $aRow['Date_fin_condition_vente'];
			$this->_IDENTIFIANT_OFFRE 		= $aRow['Identifiant_offre'];
			$this->_IDENTIFIANT_PRODUIT		= $aRow['Identifiant_produit'];
			  	
       }
    }
    /**
     * récupere la table conditionVente selon le(s) criter(s) précisés ou pas 
	 */
    function conditionVente_select( $sCritere = null )
    {
        $aRow = false;
    	$sQuery = "SELECT   *    
                   FROM conditionvente 
            	   WHERE 1=1 
            	   {$sCritere}";
        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow;
    }
    
    /**
     * Rechercher les conditions de vente de type « justificatif » 
     * liées à l’offre sélectionnée et au produit sélectionné 
     * applicables à la date d’effet du contrat
     */
	function get_conditionVenteJustContrat($idContrat, $dDateEffet)
    {
        $aRow = false;
    	$sReq ="SELECT /* get_conditionVenteJustContrat */ DISTINCT cdtv.Type_condition_vente,
    					garsous.Identifiant_contrat,
    					p.Identifiant_produit, p.Code_produit, p.Libelle_produit,
    				 	o.Identifiant_offre, o.Code_offre, o.Libelle_offre
    			FROM  	
    				garantiesouscrite garsous , garantie gar, 
    				produit p, offre o, conditionvente cdtv
    			WHERE 	
    				garsous.Identifiant_contrat = '".$idContrat."' 
    				AND garsous.Identifiant_garantie = gar.Identifiant_garantie 
    				AND gar.Identifiant_produit = p.Identifiant_produit 
    				AND p.Identifiant_offre = o.Identifiant_offre 
    				AND (cdtv.Identifiant_offre = o.Identifiant_offre or cdtv.Identifiant_offre is NULL)
    				AND (cdtv.Identifiant_produit = p.Identifiant_produit or cdtv.Identifiant_produit is NULL)
    				AND	cdtv.Type_condition_vente = 'J'
    				AND (cdtv.Date_fin_condition_vente >= '".$dDateEffet."' or cdtv.Date_fin_condition_vente is null)
    				";
    	//AND cdtv.Date_debut_condition_vente <= '".$dDateEffet."' 
    
        $aRow =  self::$_oConnexion->query($sReq);	
        return sizeof($aRow);
    }
    
	function get_CdtVenteTypeJustificatifContrat($idContrat, $sDateEffet)
    {
    	$sQuery ="SELECT DISTINCT Identifiant_condition_vente, Code_condition_vente, Libelle_condition_vente
        			, Valeur_condition_vente, Type_condition_vente,
    					garsous.Identifiant_contrat,
    					p.Identifiant_produit, p.Code_produit, p.Libelle_produit,
    				 	o.Identifiant_offre, o.Code_offre, o.Libelle_offre
    			FROM  	
    				garantiesouscrite garsous , garantie gar, 
    				produit p, offre o, conditionvente cdtv
    			WHERE 	
    				garsous.Identifiant_contrat = '".$idContrat."' 
    				AND garsous.Identifiant_garantie = gar.Identifiant_garantie 
    				AND gar.Identifiant_produit = p.Identifiant_produit 
    				AND	p.Identifiant_offre = o.Identifiant_offre 
    				AND (cdtv.Identifiant_offre = o.Identifiant_offre or cdtv.Identifiant_offre is NULL)
    				AND (cdtv.Identifiant_produit = p.Identifiant_produit or cdtv.Identifiant_produit is NULL) 
    				AND cdtv.Type_condition_vente = 'J' 
    				AND (cdtv.Date_fin_condition_vente >= ".self::$_oConnexion->date($sDateEffet)." or cdtv.Date_fin_condition_vente is null)
    				";

        $aRow =  self::$_oConnexion->query($sQuery);	

        return $aRow;
    }
    
    /**
     * Récupérer les conditions de vente de type « limite » 
     * applicables à la date d’effet du contrat 
     * pour l’offre et le produit souscrit.
     */
    
	function get_condVenteLimOffProdContrat($idContrat,$dDateEffet)
    {
        $sReq ="SELECT  distinct /*get_condVenteLimOffProdContrat */ Identifiant_condition_vente, Code_condition_vente
        	, Libelle_condition_vente, Valeur_condition_vente, Type_condition_vente, 
    					garsous.Identifiant_contrat,
    					p.Identifiant_produit, p.Code_produit, p.Libelle_produit,
    				 	o.Identifiant_offre, o.Code_offre, o.Libelle_offre
    			FROM  	
    				garantiesouscrite garsous , garantie gar, 
    				produit p, offre o, conditionvente cdtv
    			WHERE 	
    				garsous.Identifiant_contrat = '".$idContrat."' AND 
    				garsous.Identifiant_garantie = gar.Identifiant_garantie AND 
    				gar.Identifiant_produit = p.Identifiant_produit AND 
    				p.Identifiant_offre = o.Identifiant_offre 
    				AND ( cdtv.Identifiant_offre = o.Identifiant_offre or 
    				      cdtv.Identifiant_produit = p.Identifiant_produit )
    				AND	cdtv.Type_condition_vente = 'L' 
    				AND ( cdtv.Date_fin_condition_vente >= '".$dDateEffet."' OR cdtv.Date_fin_condition_vente is NULL)
    				"; 
        
        $aRow =  self::$_oConnexion->query($sReq);

        return $aRow;
    }
/**
     * Récupérer les conditions de vente de type « limite » 
     * applicables à la date d’effet du contrat 
     * pour l’offre et le produit souscrit.
     * FS: methode bis de get_condVenteLimOffProdContrat avec formatage date dd-mm-yyyy
     */
    
	function get_CdtVenteTypeLimiteContrat($idContrat, $sDateEffet)
    {

        $aRow = false;
        $sReq ="SELECT  DISTINCT  Identifiant_condition_vente, Code_condition_vente, Libelle_condition_vente
        			, Valeur_condition_vente, Type_condition_vente,
    					garsous.Identifiant_contrat,
    					p.Identifiant_produit, p.Code_produit, p.Libelle_produit,
    				 	o.Identifiant_offre, o.Code_offre, o.Libelle_offre
    			FROM  	
    				garantiesouscrite garsous , garantie gar, 
    				produit p, offre o, conditionvente cdtv
    			WHERE garsous.Identifiant_contrat = ".$idContrat." 
    				AND garsous.Identifiant_garantie = gar.Identifiant_garantie 
    				AND gar.Identifiant_produit = p.Identifiant_produit 
    				AND p.Identifiant_offre = o.Identifiant_offre 
    				AND ( cdtv.Identifiant_offre = o.Identifiant_offre or 
    				      cdtv.Identifiant_produit = p.Identifiant_produit )
    				AND cdtv.Type_condition_vente = 'L' 
    				AND ( cdtv.Date_fin_condition_vente >= ".self::$_oConnexion->date($sDateEffet)." OR cdtv.Date_fin_condition_vente is NULL)
    				";
        //AND cdtv.Date_debut_condition_vente <= ".self::$_oConnexion->date($sDateEffet)."
        $aRow =  self::$_oConnexion->query($sReq);
 
        return $aRow;
    }
    
    /**
     * Conditions de type « clause bénéficiaire applicable à la date d'effet du contrat pour produit et offre.
     */
    public function conditionVente_clauseBeneProdOffreContrat($idContrat, $dDateEffet)
    {
    	$sReq ="SELECT DISTINCT cdtv.Type_condition_vente, Code_condition_vente,
    					garsous.Identifiant_contrat,
    					p.Identifiant_produit, p.Code_produit, p.Libelle_produit,
    				 	o.Identifiant_offre, o.Code_offre, o.Libelle_offre
    			FROM  	
    				garantiesouscrite garsous , garantie gar, 
    				produit p, offre o, conditionvente cdtv
    			WHERE 	
    				garsous.Identifiant_contrat = '".$idContrat."' AND 
    				garsous.Identifiant_garantie = gar.Identifiant_garantie AND 
    				gar.Identifiant_produit = p.Identifiant_produit AND 
    				p.Identifiant_offre = o.Identifiant_offre 
    				AND (cdtv.Identifiant_offre = o.Identifiant_offre OR 
    					cdtv.Identifiant_produit = p.Identifiant_produit) 
    				AND	cdtv.Type_condition_vente = 'C'  
    				AND ( cdtv.Date_fin_condition_vente >= '".$dDateEffet."'
    					 OR cdtv.Date_fin_condition_vente is NULL)
    				";
    	
    	$aRow =  self::$_oConnexion->query($sReq);

        return $aRow;
    }
    
    
	/*
	 * 
	 */
	public function conditionVente_insert()
    {
    	$bId = false;
    	$sQuery = "INSERT INTO conditionvente (
			    Code_condition_vente ,
				Libelle_condition_vente,
				Valeur_condition_vente,
				Type_condition_vente,
				Date_debut_condition_vente,
				Date_fin_condition_vente ,
				Identifiant_offre ,
				Identifiant_produit
    			) values (
    			".self::$_oConnexion->text($this->_CODE_CDT_VENTE)
			.", ".self::$_oConnexion->text($this->_LIBELLE_CDT_VENTE)
			.", $this->_VALEUR_CDT_VENTE
			  , ".self::$_oConnexion->text($this->_TYPE_CDT_VENTE)
			.", ".self::$_oConnexion->date($this->_DATE_DEBUT_CDT_VENTE)
			.", ".self::$_oConnexion->date($this->_DATE_FIN_CDT_VENTE)
			.", $this->_IDENTIFIANT_OFFRE ,
			   $this->_IDENTIFIANT_PRODUIT
    			)";
    	
        	$bId = self::$_oConnexion->execute($sQuery);
    	return $bId;
    }
    /*
     * 
     */
    public function conditionVente_update()
    {
    	$sQuery = "UPDATE conditionvente SET 
    		 	Identifiant_condition_vente =".self::$_oConnexion->text($this->_CODE_CDT_VENTE)
			.", Code_condition_vente = ".self::$_oConnexion->text($this->_LIBELLE_CDT_VENTE)
			.", Libelle_condition_vente = "	.self::$_oConnexion->text($this->_LIBELLE_CDT_VENTE)
			.", Valeur_condition_vente = $this->_VALEUR_CDT_VENTE
			  , Type_condition_vente = ".self::$_oConnexion->text($this->_TYPE_CDT_VENTE)
			.", Date_debut_condition_vente  = ".self::$_oConnexion->date($this->_DATE_DEBUT_CDT_VENTE)
			.", Date_fin_condition_vente = ".self::$_oConnexion->date($this->_DATE_FIN_CDT_VENTE)
			.", Identifiant_offre = $this->_IDENTIFIANT_OFFRE
			  , Identifiant_produit =  $this->_IDENTIFIANT_PRODUIT 
	    		WHERE Identifiant_condition_vente 	= ".$this->_IDENTIFIANT_CDT_VENTE;
    	
    	return self::$_oConnexion->execute($sQuery);
    }
    
	public function conditionVente_isClauseBeneficiaireExists($idOffre, $idProduit)
	{	
		$aRow == false;
		if($idOffre != null && $idProduit != null)
		{
			$sQuery ="SELECT * from conditionvente  
	    			WHERE (Identifiant_offre = ".$idOffre."  or Identifiant_produit=".$idProduit.") 
	    			AND ( Type_condition_vente = 'C' ) 
	    			ORDER BY Identifiant_condition_vente ASC ";
	    	$aRow =  self::$_oConnexion->query($sQuery);
		}
		if($aRow == false || empty($aRow) )
			return false;
        else return true;
    }
    
	public function conditionVente_exists($idOffre, $idProduit)
	{	
		$sCritere ="AND (Identifiant_offre = ".$idOffre."  or Identifiant_produit=".$idProduit.") 
    			  ORDER BY Identifiant_condition_vente ASC ";
    	$aRow = $this->conditionVente_select($sCritere);
   
		if($aRow == false || empty($aRow) )
			return false;
        else return true;
    }
    
/**
     * Rechercher les conditions de vente de type « justificatif » 
     * liées à l’offre sélectionnée et au produit sélectionné 
     * applicables à la date d’effet du contrat
     * FS methode bis avec format date dd-mm-yyyy
     */
	function get_isCdtVenteTypeJustExist($idContrat, $sDateEffet)
    {
    	$sQuery ="SELECT  DISTINCT  cdtv.Identifiant_condition_vente
    			FROM  	
    				garantiesouscrite garsous , garantie gar, 
    				produit p, offre o, conditionvente cdtv
    			WHERE garsous.Identifiant_contrat = ".$idContrat."
    			AND garsous.Identifiant_garantie = gar.Identifiant_garantie 
    			AND gar.Identifiant_produit = p.Identifiant_produit 
    			AND p.Identifiant_offre = o.Identifiant_offre 
    			AND (cdtv.Identifiant_offre = o.Identifiant_offre OR 
    				 cdtv.Identifiant_produit = p.Identifiant_produit) 
    			AND cdtv.Type_condition_vente = 'J' 
    			AND (cdtv.Date_fin_condition_vente >= ".self::$_oConnexion->date($sDateEffet)." OR cdtv.Date_fin_condition_vente is NULL)
    				";
        $aRow =  self::$_oConnexion->query($sQuery);	
        if(!empty($aRow)) return true;
        else return false;
        
    }
}


?>